package com.cherry.system.service.impl;

import com.cherry.common.core.text.Convert;
import com.cherry.common.utils.ProvinceUtils;
import com.cherry.system.domain.SysPost;
import com.cherry.system.domain.response.SysProvincialData;
import com.cherry.system.mapper.SysPostMapper;
import com.cherry.system.service.ISysPostService;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

/**
 * 岗位管理 服务实现
 *
 * @author 孙晨阳
 */
@Service
public class SysPostServiceImpl implements ISysPostService {

    @Resource
    private SysPostMapper postMapper;

    /**
     * 查询岗位信息集合
     *
     * @param post 岗位信息
     * @return 岗位信息集合
     */
    @Override
    public List<SysPost> selectPostList(SysPost post) {
        return postMapper.selectPostList(post);
    }

    /**
     * 新增岗位保存
     *
     * @param post 岗位信息
     * @return 结果
     */
    @Override
    public int insertPost(SysPost post) {
        return postMapper.insertPost(post);
    }

    /**
     * 通过岗位ID查询岗位信息
     *
     * @param postId 岗位ID
     * @return 岗位信息
     */
    @Override
    public SysPost selectPostById(Long postId) {
        return postMapper.selectPostById(postId);
    }

    /**
     * 修改保存岗位信息
     *
     * @param post 岗位信息
     * @return 结果
     */
    @Override
    public int updatePost(SysPost post) {
        return postMapper.updatePost(post);
    }

    /**
     * 批量删除岗位信息
     *
     * @param ids 需要删除的数据ID
     * @return 结果
     */
    @Override
    public int deletePostByIds(String ids) {
        return postMapper.deletePostByIds(Convert.toLongArray(ids));
    }

    /**
     * 岗位状态修改
     *
     * @return 结果
     */
    @Override
    public int changeStatus(SysPost post) {
        return postMapper.updatePost(post);
    }

    /**
     * 获取各省份的岗位数量
     *
     * @return 结果
     */
    @Override
    public List<SysProvincialData> getProvincialData() {

        List<SysProvincialData> provincialDataList = new ArrayList<>();

        List<SysPost> postList = selectPostList(new SysPost());
        postList.forEach(post -> {
            String province = ProvinceUtils.getProvinceByCity(post.getCity());
            for (Map.Entry<String, Integer> entry : ProvinceUtils.PROVINCES_MAP.entrySet()) {
                if (entry.getKey().equals(province)) {
                    ProvinceUtils.PROVINCES_MAP.put(entry.getKey(), entry.getValue() + 1);
                    break;
                }
            }
        });

        for (Map.Entry<String, Integer> entry : ProvinceUtils.PROVINCES_MAP.entrySet()) {
            provincialDataList.add(new SysProvincialData(entry.getKey(), entry.getValue()));
        }

        return provincialDataList;
    }
}
